package com.elder.common.utils;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class StringNewUtils {
    /**
     * 判断字符串是否为空字符串
     * @author chengshx
     * @param str
     * @return
     */
    public static boolean isEmpty(String str) {
        if(str == null || str.trim().equals("") || str.trim().equalsIgnoreCase("null")){
            return true;
        }
        return false;
    }

    /**
     * 判断字符串长度是否合法
     * @author chengshx
     * @param str
     * @param start 最小长度
     * @param end 最大长度
     * @return
     */
    public static boolean isValidLenght(String str, int start, int end) {
        if(str == null) return false;
        if(str.trim().length() < start || str.trim().length() > end) {
            return false;
        }
        return true;
    }

    /**
     * 生成随机字符串
     * @author weiyx
     * @param length 要生成的字符串的长度
     * @return
     */
    public static String getRandomStr(int length){
        if(length <= 0) return "";
        String baseStr = "abcdefghijkmnpqrstuvwxyz23456789";
        Random random = new Random();
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(baseStr.length());
            stringBuffer.append(baseStr.charAt(number));
        }
        return stringBuffer.toString();
    }

    /**
     * 生成随机数字串
     * @author lizhgz
     * @param length 要生成的数字的长度
     * @return
     */
    public static String getRandomNum(int length){
        if(length <= 0) return "";
        String baseStr = "0123456789";
        Random random = new Random();
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(baseStr.length());
            stringBuffer.append(baseStr.charAt(number));
        }
        return stringBuffer.toString();
    }

    /**
     * 截取链接的基础地址
     * @author chengshx
     * @date 2017年7月14日
     *
     * @param url 完整的url，如http://localhost:8080?param=value https://tapi.seentao.com/school/ss.get?param.value
     * @return 基础地址，如http://localhost:8080
     * @throws MalformedURLException
     * @modified by choijung 20180905
     */
    public static String getBaseUrl(String url) {
        try {
            URL objUrl = new URL(url);
            return objUrl.getPort() > -1 ? objUrl.getHost() + ":" + objUrl.getPort() : objUrl.getHost();
        } catch (MalformedURLException e) {
            return url;
        }
    }

    /**
     * 长整型转字符串
     * @author chengshx
     * @date 2017年9月15日
     *
     * @param num
     * @return
     */
    public static String long2Str (Long num) {
        String str = "";
        if(num != null) {
            str = String.valueOf(num);
        }
        return str;
    }

    /**
     * 整型转字符串
     * @author chengshx
     * @date 2017年9月15日
     *
     * @param num
     * @return
     */
    public static String int2Str (Integer num) {
        String str = "";
        if(num != null) {
            str = String.valueOf(num);
        }
        return str;
    }

    /**
     * double转字符串
     * @param num
     * @return
     */
    public static String double2Str (Double num){
        String str = "";
        if(num != null) {
            str = String.valueOf(num);
        }
        return str;
    }
    /**
     * 初始化字符串，null返回""
     * @author chengshx
     * @date 2017年10月6日
     *
     * @param str
     * @return
     */
    public static String formatStr(String str) {
        return str == null ? "" : str;
    }

    /**
     * 数值型List以符号分隔返回
     * @author chengshx
     * @date 2017年12月19日
     *
     * @param list 数值泛型List
     * @param separator 分隔符
     * @return
     */
    public static String list2Str(List<? extends Number> list, String separator) {
        StringBuilder strBuilder = new StringBuilder();
        if(list != null && list.size() >= 0 && !isEmpty(separator)) {
            list.forEach(item -> {
                strBuilder.append(item);
                strBuilder.append(separator);
            });
        }
        return strBuilder.length() > 0 ? strBuilder.substring(0, strBuilder.length() - 1) : strBuilder.toString();
    }

    /**
     * 数值型List以逗号分隔返回
     * @author chengshx
     * @date 2017年12月19日
     *
     * @param list 数值泛型List
     * @return
     */
    public static String list2Str(List<? extends Number> list) {
        return list2Str(list, ",");
    }

    /**
     * 处理null值, 转换成""
     * @author weiyx
     * @date 2019/11/11
     * @param obj
     * @return java.lang.String
     */
    public static String formatStr(Object obj){
        return (obj == null)? "": String.valueOf(obj);
    }

    /**
     * @description : 去掉前后空格-包含全角空格
     * @param str 目标字符串
     * @return : java.lang.String
     * @author : W.jx
     * @date : 2021/9/26
     */
    public static String trim(String str){
        str = str.trim();
        while (str.startsWith("　")) {//这里判断是不是全角空格
            str = str.substring(1, str.length()).trim();
        }
        while (str.endsWith("　")) {
            str = str.substring(0, str.length() - 1).trim();
        }
        return str;
    }

    /**
     * 	字符串转List
     * @param strJon
     * @return java.util.List<java.lang.Long>
     * @author raozhanxing
     * @date 2022/4/26
     */
    public static List<Long> strSwitchList(String strJon){

        String[] strArray = strJon.split(",");
        List<Long> list = new ArrayList<>();

        if (strArray.length > 0){
            for(String str : strArray){
                list.add(Long.valueOf(str));
            }
        }
        return list;
    }

    /**
     * 比较两个字符串内容是否一致（长度短的右补0保持长度一致）
     * @param str1
     * @param str2
     * @return boolean
     * @author raozhanxing
     * @date 2022/5/20
     */
    public static boolean elementLessThan(String str1, String str2, String separator){

        boolean flag = false;
        if (StringUtils.isEmpty(str1) || StringUtils.isEmpty(str2)){
            return flag;
        }

        List<Long> list1 = ArraysUtils.strToLongList(str1, separator);
        List<Long> list2 = ArraysUtils.strToLongList(str2, separator);

        int length = Math.abs(list1.size() - list2.size());

        // 长度补齐
        for (int i = 0; i < length; i++) {
            // 循环次数
            if (list1.size() > list2.size()){
                list2.add(0L);
            }else if (list1.size() < list2.size()){
                list1.add(0L);
            }else {
                break;
            }
        }

        // 循环元素比较
        for (int i = 0; i < list1.size(); i++) {
            if (list1.get(i) < list2.get(i)){
                // 直接结束
                flag = true;
                break;
            }else if(list1.get(i) > list2.get(i)){
                break;
            }
        }
        return flag;
    }
}
